package projetolp2.Sistem;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * Meal-Points - Projeto de Laborat�rio de programacao 2 - 2011.1
 * 
 * Opiniao
 * 
 * @author  Diego Tavares 
 * @author  Felipe Travassos
 * @author  Mayra Kelly
 *
 */

public class Opiniao{
	
    private String data;
    
    private String nomeUsuario;
    
	private List<OpinioesDeUsuarios> votos = new ArrayList<OpinioesDeUsuarios>();
	
	/**
	 * 
	 * @param data
	 *        A data na qual o usuario opinou.
	 * @param nome
	 *        O nome do usuario que opinou.
	 * @param votos
	 *        As opinioes do usuario.
	 * @throws Exception
	 * 		 Se a data da Opiniao for nula ou vazia, e votos  for nulo.
	 */
	
	public Opiniao(String data,String nome, List<OpinioesDeUsuarios> votos) throws Exception{
		
		try{
		
		if(data.equals("")|| data == null){
			
			throw new Exception("Data nao pode ser nula ou vazia!");
		}
		if(votos == null){
			
			throw new Exception("Votos de usuario nao pode ser nulo ou vazio!");
		}

		this.data = data;
		this.votos = votos;
		this.nomeUsuario = nome;
		
		}catch(Exception e){
			
			System.err.println(e.getMessage());
		}
	}
	
	/**
	 * Recupera a data na qual a opiniao foi registrada.
	 * 
	 * @return A data da opiniao.
	 */

	public String getData() {return data;}
	
	/**
	 * Recupera os votos(Opinioes) registrados.
	 * 
	 * @return O voto registrado.           // ver!
	 */
	
	public List<OpinioesDeUsuarios> getVotos() {return votos;}
	
	/**
	 * Recupera o nome do usuario que opinou.
	 * 
	 * @return O nome do usuario que opinou.
	 */
	
	public String getNomeUsuario(){
		return nomeUsuario;}

	public  void setData(String data) {this.data = data;}
	
	/**
	 * Troca os votos(opinioes) de um usuario por outros.
	 * 
	 * @param votos
	 *        As opinioes do usuario.
	 *        
	 */

	public void setVotos(List<OpinioesDeUsuarios> votos) {this.votos = votos;}
	
	/**
	 * Troca o nome de um usuario que opinou por outro.
	 * 
	 * @param nome
	 *        O nome do usuario que opinou.
	 */
	
	public void  setNomeUsuario(String nome){ this.nomeUsuario = nome;}
	
	/**
	 * Testa a igualdade de um objeto com a Opiniao.
	 * 
	 * @param outraOpiniao
	 *       O objeto a comparar com esta Opiniao.
	 *       
	 * @return True se a outraOpiniao for igual a esta Opiniao, false caso contr�rio.
	 * 
	 */
	public boolean equals(Object outraOpiniao){
		
		if(!(outraOpiniao instanceof Opiniao)){
			
			return false;
		}
		
		Opiniao novaOpiniao = (Opiniao) outraOpiniao;
		if(novaOpiniao.getData() == getData() && novaOpiniao.getVotos() == getVotos()&& novaOpiniao.getNomeUsuario() == getNomeUsuario()){
			
			return true;
		}
		
	    return false;
	}
	
	/**
	 * Representa a opiniao como String.
	 * 
	 * @return Um string representando a opiniao.
	 * 
	 */

	public String toString() {
		return  " Data: "+ data + " Votos: " + votos;
	}

}
